I am trying to embed a framework and execute it on simulator:
- add framework, it is
required
by default, - make it embed-and-sign
If I start the app in simulator from XCode, all runs (by default it runs under debugger, so I assume a bit different environment). If I run it directly in simulator, using xcrun simctl, it crashes with framework binary not found (is that expected?).
So I experimented [quite] a bit and updated the LOAD COMMAND to load the dylib with @loader_path (default is @rpath that xcode makes) - in such case the error is:
Library not loaded: @loader_path/Frameworks/***.framework/***
Referenced from: <E13560A8-7387-308A-AF0F-F5107B737910> /Users/USER/Library/Developer/CoreSimulator/Devices/47B8C2D5-F78E-4976-B124-A25623DF14A7/data/Containers/Bundle/Application/5B5EA95D-44CD-4403-BE1E-FC6851B44917/App.app/App
Reason: tried: '/Users/username/Library/Developer/CoreSimulator/Devices/47B8C2D5-F78E-4976-B124-A25623DF14A7/data/Containers/Bundle/Application/5B5EA95D-44CD-4403-BE1E-FC6851B44917/App.app/Frameworks/***.framework/***' (no such file), '/Library/Developer/CoreSimulator/Volumes/iOS_21E213/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.4.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/***.framework/***' (no such file)
(terminated at launch; ignore backtrace)
/Users/username/Library/Developer/CoreSimulator/Devices/47B8C2D5-F78E-4976-B124-A25623DF14A7/data/Containers/Bundle/Application/5B5EA95D-44CD-4403-BE1E-FC6851B44917/App.app/Frameworks/***.framework/*** is a local path on my dev machine, which sounds like a bug. Is that a bug? Should I open one somewhere for Apple?
Then I played a bit more and found this https://stackoverflow.com/a/52535580/21881034 - "All you need to do is set the third party frameworks you are using in your custom framework for e.g:- socket.io-client-swift as Optional instead of Required under Link binary with Libraries in build Phases section" - which worked.
What it does is replaces the load command with LC_LOAD_WEAK_DYLIB - so I assume it executes a bit later and probably again a different environment.